

/*----------------------------------------------------------------------------------------
当前实现的命令

#if 0
3.2  读取白名单  readWhiteList
3.4  读取分组名称数量 readGroupNameNum 
3.5  读取分组 readGroup	16
3.7  配置场景  setScence	18
3.8  读取场景  readScence	20
3.9  配置绑定  setBind	21
3.10  读取绑定  readBind	22

3.14  读网关信息  readGwMsg	34
3.15  设置网关  setupGw	35
3.16  读网关配置 readGwSetup	36
3.17  读白名单在网设备 readOnlineInList	37
3.18  读非白名单在网设备 readOnlineNoList	38


3.20  重启网关  resetGw	40
////3.21  删除白名单  delWhiteList	40
3.22  外部信号输入 extenalSignal	41
////3.23  删除场景 delScence	41
////3.24  执行场景 execScence	42
3.25  读取所有绑定列表 readBindAllHead	42
////3.26  绑定删除   bindDel	43
3.27 读取设备pid：   readPid	43
3.28  同步场景数据   syncScene	44

3.32   读取主平台ip端口  mainIpRead	47
3.33  设置主平台ip端口   mainIpSet	47
3.35  读取网关io状态      gwIoRead	48
3.36  设置网关io（继电器） 状态  gwIoSet	49
3.36.1   全部output同时设	49
3.36.2    指定设置某个或某几个output	49
3.37  读取定时任务    timingTaskRead	50
3.38  设置定时任务   timingTaskSet	51
3.39  读取网关以太网ip信息  gwEthIpRead	52
3.40  设置网关以太网ip信息  gwEthIpSet	52
3.41  读取网关网络状态信息  gwIfconfigRead	53

#endif


-------------------------------------------------------------------------------------------------------------------------------- */





//  gcc ./cJSON/cJSON.c cjson_test.c -o 1  -lm
//  gcc cJSON.c cjson_test.c -o cjson_test  -lm



#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>
#include "cJSON.h"

cJSON *TCP;
char *json_data;

#if 1

#define  TYPE_CMD   	"cmd"

 //char cct_id_str[]="010000000780";


unsigned int  gui_js_api_msg_id = 0;
volatile unsigned int  gui_js_api_timeStamp = 0;

char* get_gateway_id(void)
{
  return "CCT_010000000780";  //   cct_id_str ;
}




/*
“head”:{
	  “gatewayId”:”xxxxxx”,      // 消息来源或目的设备
	  “msgId”:12345,           // 消息序列号
	  “timeStamp”:12345678,    // unix 时间
	  “notify”:”heartBeast”      // 指令类型
	},
*/
int set_json_comm_item(cJSON *root, const char *ptype, const char *pname, unsigned int msg_id)
{
	time_t timeStamp;    
	time(&timeStamp); 
			
	cJSON *obj = cJSON_CreateObject();
    
    if( obj ==NULL)
    {
	  return 0;
    }


	cJSON_AddItemToObject(root, "head", obj);

	cJSON_AddStringToObject(obj, "gatewayId", get_gateway_id());
	cJSON_AddNumberToObject(obj, "msgId", msg_id);
	cJSON_AddNumberToObject(obj, "timeStamp", timeStamp);
	cJSON_AddStringToObject(obj, ptype, pname);

	return !0;
}




// 亮度条（bright）（范围0~100）
// 色温条（cct）（范围暂时定为2700 ~6500，  最大值和最小值可能以后需要允许用户
//   W = bright * (cct – MIN_CCT)/(MAX_CCT-MIN_CCT) = bright * (cct-2700)/3800
//   C = bright – W 
#define   CCT_BAR_MIN       (2700)
#define   CCT_BAR_MAX       (6500)



//返回0失败，!0成功
uint8_t get_bright_wc_double(uint8_t bright ,const uint16_t cct , double* bright_c , double* bright_w )
{

 double w,c;


   if( (cct < CCT_BAR_MIN) || (cct > CCT_BAR_MAX) )
   {
      return 0;
   }


   if( bright > 100 )
   {
      bright = 100;
   }
   
   w =  (cct - CCT_BAR_MIN); 
   w /= (CCT_BAR_MAX -CCT_BAR_MIN);
   w *= bright;
   
   c = bright - w;

   *bright_w = w;
   *bright_c = c;

return 1;

}



//返回0失败，!0成功
uint8_t get_bright_wc_int(uint8_t bright ,const uint16_t cct , int* bright_c , int* bright_w )
{
 int w,c;

   if( (cct < CCT_BAR_MIN) || (cct > CCT_BAR_MAX) )
   {
      return 0;
   }


   if( bright > 100 )
   {
      bright = 100;
   }
   
   w =  (cct - CCT_BAR_MIN); 
   w /= (CCT_BAR_MAX -CCT_BAR_MIN);
   w *= bright;
   
   c = bright - w;

   *bright_w = w;
   *bright_c = c;

return 1;

}



//双色灯
// {
// 	"data": {
// 		"pid": "1313",
// 		"mac": "FFFFFFFFFFFF",
// 	},
// 	"attrLst": [{
// 		"name": "W",
// 		"type": 0,
// 		"val": 21
// 	}, {
// 		"name": "C",
// 		"type": 0,
// 		"val": 58
// 	}],
// 	"head": {
// 		"gatewayId": "gw_0000C0A8011B",
// 		"msgId": 0,
// 		"timeStamp": 0,
// 		"cmd": "setAttr",
// 		"appuserId": 11
// 	}
// }

//广播双色温调光
void json_write_double_color_lamp(const char* node_mac ,const char* pid_str ,const uint8_t bright)
{
    cJSON* cjs_root = NULL;  
    cJSON* cjs_data = NULL;
    char*  cjs_str  = NULL;


 //double bright_c , bright_w ;
 int bright_c , bright_w ;

    printf("%s\n", __FUNCTION__ ) ;

//返回0失败，!0成功
//    if( !get_bright_wc_int( bright ,(CCT_BAR_MAX -CCT_BAR_MIN)/2 ,  &bright_c ,  &bright_w ) )
//    {
//        goto lab_exit;
//    }


  // char gatewayId_str[]="010000000780";
	
	cjs_root = cJSON_CreateObject();   //创建一个对象
    if (cjs_root == NULL)
    {
        goto lab_exit;
    }


	cjs_data = cJSON_CreateObject();   //创建一个对象data
    if (cjs_data == NULL)
    {
        goto lab_exit;
    }

	if(  0==set_json_comm_item(cjs_root, TYPE_CMD, "setAttr", gui_js_api_msg_id++) )
    {
        goto lab_exit;     
    }


// 	"data": {
// 		"pid": "1313",
// 		"mac": "FFFFFFFFFFFF",
// 	},
	// "attrLst": [{
	// 	"name": "W",
	// 	"type": 0,  // val 的类型， 0：整数，1：布尔， 2：浮点数 ， 默认整数 
	// 	"val": 21
	// }, {
	// 	"name": "C",
	// 	"type": 0,
	// 	"val": 58
	// }],




    if(NULL !=node_mac)
    {
        cJSON_AddStringToObject(cjs_data,	"mac",	node_mac );
    }
	

    if(NULL !=pid_str)
    {
        cJSON_AddStringToObject(cjs_data,	"pid",	pid_str );
    }


	cJSON *cjs_attrLst  = cJSON_CreateArray();				//创建一个数组  cjs_attrLst

    if (cjs_attrLst == NULL)
    {
        goto lab_exit;
    }


	cJSON *cjs_body  = cJSON_CreateArray();				//创建一个数组  cjs_body

    if (cjs_body == NULL)
    {
        goto lab_exit;
    }



	cJSON* cjs_lamp_w = cJSON_CreateObject();   //创建一个对象  
    if (cjs_lamp_w == NULL)
    {
        goto lab_exit;
    }


	cJSON* cjs_lamp_c = cJSON_CreateObject();   //创建一个对象  
    if (cjs_lamp_c == NULL)
    {
        goto lab_exit;
    }


	// 	"name": "W",
	// 	"type": 0,  // val 的类型， 0：整数，1：布尔， 2：浮点数 ， 默认整数 
	// 	"val": 21
	// },

	 cJSON_AddStringToObject(cjs_lamp_w,	"name",	"W");		//添加字符串 
     cJSON_AddNumberToObject(cjs_lamp_w,	"type",	0 );       // val 的类型， 0：整数，1：布尔， 2：浮点数 ， 默认整数 
     cJSON_AddNumberToObject(cjs_lamp_w,	"val",	bright_w );

     cJSON_AddItemToArray(cjs_attrLst,	cjs_lamp_w );	//添加对象到数组中


	 cJSON_AddStringToObject(cjs_lamp_c,	"name",	"C");		//添加字符串 
     cJSON_AddNumberToObject(cjs_lamp_c,	"type",	0 );       // val 的类型， 0：整数，1：布尔， 2：浮点数 ， 默认整数 
     cJSON_AddNumberToObject(cjs_lamp_c,	"val",	bright_c );

     cJSON_AddItemToArray(cjs_attrLst,	cjs_lamp_c );	//添加对象到数组中


     cJSON_AddNumberToObject(cjs_lamp_c,	"val",	bright_c );
     //cJSON_AddArrayToObject(cJSON * const object, const char * const name);

	cJSON_AddItemToObject(cjs_root,	"attrLst",	cjs_attrLst );	//添加数组对象到跟对象






	// "body":[
	//   {"dpid":10001},
	//   {"dpid":10023}
	//  ]


	cJSON* cjs_tmp = cJSON_CreateObject();   //创建一个对象  
    if (cjs_tmp == NULL)
    {
        goto lab_exit;
    }

     cJSON_AddNumberToObject(cjs_tmp,	"dpid",	112 );

     cJSON_AddItemToArray(cjs_body,	cjs_tmp );	//添加对象到数组中
     //cJSON_AddArrayToObject(cJSON * const object, const char * const name);

	cJSON_AddItemToObject(cjs_root,	"body",	cjs_body );	//添加数组对象到跟对象


 //   cJSON_AddStringToObject(cjs_root,	"",	'\n');
  //  cJSON_AddStringToObject(cjs_root,	NULL,	'\n');   

    //JSON数据结构转换为JSON字符串
#if 0 //CJSON_PRINT_UNFORM_ENABLE
	cjs_str = cJSON_PrintUnformatted(cjs_root);    //没有空格符的格式=====提高通信效率------
#else
	cjs_str = cJSON_Print(cjs_root);		         // 有空格符的格式------便于人工阅读识别-------------
#endif


    if (cjs_str == NULL)
    {
        goto lab_exit;
    }


	printf("%s\n",cjs_str);		//输出字符串

	//send(cjs_str);      //发送数据

    //返回值 0---发送失败，1---发送成功
  //  TCP_ClientSend( (uint8_t*)cjs_str, strlen(cjs_str) );


 //   free(cjs_str );   //释放内存空间---尚未确定是否需要这步---????--
    cJSON_free(cjs_str ); 

	printf("ok\n");	

lab_exit:

    if ( cjs_root != NULL)
    {
	    cJSON_Delete(cjs_root);		//清除结构体
    }

    cjs_root = NULL;  
    cjs_str = NULL;


}






//广播双色温调光
void json_write_double_color_lamp_00(const char* node_mac ,const char* pid_str ,const uint8_t bright)
{
    cJSON* cjs_root = NULL;  
    cJSON* cjs_data = NULL;
    char*  cjs_str  = NULL;


 //double bright_c , bright_w ;
 int bright_c , bright_w ;

    printf("%s\n", __FUNCTION__ ) ;

	
	cjs_root = cJSON_CreateObject();   //创建一个对象
    if (cjs_root == NULL)
    {
        goto lab_exit;
    }


	cjs_data = cJSON_CreateObject();   //创建一个对象data
    if (cjs_data == NULL)
    {
        goto lab_exit;
    }

	if(  0==set_json_comm_item(cjs_root, TYPE_CMD, "setAttr", gui_js_api_msg_id++) )
    {
        goto lab_exit;     
    }



    if(NULL !=node_mac)
    {
        cJSON_AddStringToObject(cjs_data,	"mac",	node_mac );
    }
	

    if(NULL !=pid_str)
    {
        cJSON_AddStringToObject(cjs_data,	"pid",	pid_str );
    }


	cJSON *cjs_attrLst  = cJSON_CreateArray();				//创建一个数组  cjs_attrLst

    if (cjs_attrLst == NULL)
    {
        goto lab_exit;
    }


	cJSON *cjs_body  = cJSON_CreateArray();				//创建一个数组  cjs_body

    if (cjs_body == NULL)
    {
        goto lab_exit;
    }



	cJSON* cjs_lamp_w = cJSON_CreateObject();   //创建一个对象  
    if (cjs_lamp_w == NULL)
    {
        goto lab_exit;
    }


	cJSON* cjs_lamp_c = cJSON_CreateObject();   //创建一个对象  
    if (cjs_lamp_c == NULL)
    {
        goto lab_exit;
    }


	// 	"name": "W",
	// 	"type": 0,  // val 的类型， 0：整数，1：布尔， 2：浮点数 ， 默认整数 
	// 	"val": 21
	// },

	 cJSON_AddStringToObject(cjs_lamp_w,	"name",	"W");		//添加字符串 
     cJSON_AddNumberToObject(cjs_lamp_w,	"type",	0 );       // val 的类型， 0：整数，1：布尔， 2：浮点数 ， 默认整数 
     cJSON_AddNumberToObject(cjs_lamp_w,	"val",	bright_w );

     cJSON_AddItemToArray(cjs_attrLst,	cjs_lamp_w );	//添加对象到数组中


	 cJSON_AddStringToObject(cjs_lamp_c,	"name",	"C");		//添加字符串 
     cJSON_AddNumberToObject(cjs_lamp_c,	"type",	0 );       // val 的类型， 0：整数，1：布尔， 2：浮点数 ， 默认整数 
     cJSON_AddNumberToObject(cjs_lamp_c,	"val",	bright_c );

     cJSON_AddItemToArray(cjs_attrLst,	cjs_lamp_c );	//添加对象到数组中


     cJSON_AddNumberToObject(cjs_lamp_c,	"val",	bright_c );
     //cJSON_AddArrayToObject(cJSON * const object, const char * const name);

	cJSON_AddItemToObject(cjs_root,	"attrLst",	cjs_attrLst );	//添加数组对象到跟对象






	// "body":[
	//   {"dpid":10001},
	//   {"dpid":10023}
	//  ]


#define   IOT_ID_TABLE_MAX  (8)  

       cJSON *cjs_Z[IOT_ID_TABLE_MAX] ;

 
        //-------------------------------------------------------------------------------------
            for(uint8_t z_idx=0; z_idx<IOT_ID_TABLE_MAX ;z_idx++)
            {
                cjs_Z[z_idx]  = cJSON_CreateObject();//创建一个对象     

               cJSON_AddNumberToObject(cjs_Z[z_idx],	"dpid",	100+z_idx );

               cJSON_AddItemToArray(cjs_body,	cjs_Z[z_idx] );	//添加对象到数组中
            }
        //-------------------------------------------------------------------------------------
	cJSON_AddItemToObject(cjs_root,	"body",	cjs_body );	//添加数组对象到跟对象





 //   cJSON_AddStringToObject(cjs_root,	"",	'\n');
  //  cJSON_AddStringToObject(cjs_root,	NULL,	'\n');   

    //JSON数据结构转换为JSON字符串
#if 0 //CJSON_PRINT_UNFORM_ENABLE
	cjs_str = cJSON_PrintUnformatted(cjs_root);    //没有空格符的格式=====提高通信效率------
#else
	cjs_str = cJSON_Print(cjs_root);		         // 有空格符的格式------便于人工阅读识别-------------
#endif


    if (cjs_str == NULL)
    {
        goto lab_exit;
    }


	printf("%s\n",cjs_str);		//输出字符串

	//send(cjs_str);      //发送数据

    //返回值 0---发送失败，1---发送成功
  //  TCP_ClientSend( (uint8_t*)cjs_str, strlen(cjs_str) );


 //   free(cjs_str );   //释放内存空间---尚未确定是否需要这步---????--
    cJSON_free(cjs_str ); 

	printf("ok\n");	

lab_exit:

    if ( cjs_root != NULL)
    {
	    cJSON_Delete(cjs_root);		//清除结构体
    }

    cjs_root = NULL;  
    cjs_str = NULL;


}








void json1(void)
{
	double  grade[4]={66.51,118.52,61.53,128.54};
	int		time[4]={123,456,789,150};
	

    printf("%s\n", __FUNCTION__ ) ;

   
	TCP = cJSON_CreateObject();				//创建一个对象

 	cJSON_AddStringToObject(TCP,	"name",			"MQ");		//添加字符串 
	cJSON_AddNumberToObject(TCP,	"age",			25);	    	//添加整型数字 
	cJSON_AddNumberToObject(TCP,	"height",		183.52);	//添加浮点型数字
	cJSON_AddFalseToObject(TCP,		"gender"		);			//添加逻辑值false
	 
		cJSON *ADD	= cJSON_CreateObject();				//创建一个对象
		cJSON_AddStringToObject(ADD,	"country",	"China");	//添加字符串 
		cJSON_AddNumberToObject(ADD,	"zip-code",	123456);	//添加整型数字
 	cJSON_AddItemToObject(TCP,		"address",ADD);
 	
		cJSON *SUB  = cJSON_CreateArray();				//创建一个数组
		cJSON_AddStringToObject(SUB,	"",			"政治"); 		//添加字符串到数组
 		cJSON_AddStringToObject(SUB,	"",			"数学");
		cJSON_AddStringToObject(SUB,	"",			"英语");
		cJSON_AddStringToObject(SUB,	"",			"专业课");
	cJSON_AddItemToObject(TCP,		"subject",SUB);		//添加数组到对象
	
		cJSON *TIM  = cJSON_CreateIntArray(time,4);		//创建一个整型数组
	cJSON_AddItemToObject(TCP,		"time",TIM);
	
		cJSON *GRA  = cJSON_CreateDoubleArray(grade,4);	//创建一个双浮点型数组
	cJSON_AddItemToObject(TCP,		"grade",GRA);
	
	cJSON *STU  = cJSON_CreateArray();				//创建一个数组
		cJSON *Z3  = cJSON_CreateObject();				//创建一个对象
			cJSON_AddStringToObject(Z3,	"name",		"张三");		//添加字符串 
			cJSON_AddNumberToObject(Z3,	"age",		24);	    	//添加整型数字 
			cJSON_AddTrueToObject(Z3,	"gender"	);				//添加逻辑值 
			cJSON_AddItemToArray(STU,Z3);					//添加对象到数组中 
		cJSON *L4  = cJSON_CreateObject();				//创建一个对象
			cJSON_AddStringToObject(L4,	"name",		"李四");		//添加字符串 
			cJSON_AddNumberToObject(L4,	"age",		25);	    	//添加整型数字 
			cJSON_AddTrueToObject(L4,	"gender"	);				//添加逻辑值 
			cJSON_AddItemToArray(STU,L4);					//添加对象到数组中
		cJSON *W5  = cJSON_CreateObject();				//创建一个对象
			cJSON_AddStringToObject(W5,	"name",		"王五");		//添加字符串 
			cJSON_AddNumberToObject(W5,	"age",		26);	    	//添加整型数字 
			cJSON_AddTrueToObject(W5,	"gender"	);				//添加逻辑值 
			cJSON_AddItemToArray(STU,W5);					//添加对象到数组中
	cJSON_AddItemToObject(TCP,		"student",STU);		//添加数组到对象中

	json_data = cJSON_Print(TCP);				//JSON数据结构转换为JSON字符串


   printf("%s\n", json_data);

}


#if 0
3，下行指令详述
json项为 cmd， value为各个命令字符串。需要应答， 应答json项为response。
“head”项是固定的，不同指令间是”指令类型”的区别：
cmd/response/notify/indicate/confirm 五选一。
下面的head项陈述，可能只写”指令类型”，而忽略其他的固定项。
“body”,”data”,”attrLst”是有效数据。

3.1  配置白名单  setWhiteList
3.1.1 下行命令:
{
“head”:{
  “gatewayId”:”xxxxxx”,      // 消息来源或目的设备
  “msgId”:12345,           // 消息序列号
  “timeStamp”:12345678,    // unix 时间
  “cmd”:”setWhiteList”      // 指令类型为：cmd
},
“body”:[
{ "name":"lamp1",            //  灯的名称， 用户输入的， 不同设备不可同名。
           "mac":"112233445566",  // 灯mac地址， 固定的，用户扫描或手动输入
           “nodeType”:0,
           “channel”:1,
           “privAddr”:23,
           "pid": "xxxxxx",       // 产品类别， 平台预先定好的
           “model”:”NBE_32LE5B”, // 产品型号， 可选
          “propertyId”:2,                    // 资产id（灯杆号）， 可选
          “propertyName”:”abcdfegggg”       //  资产名称， 可选
          “mainGroupNo”:3,                // 路灯分组号， 可选
          “label”:”xxx”                  // 标签（别名），可选，不同设备可以同名，默认同name
}
]
}

#endif 







#if 0

 void IOT_SENSOR_ac_meter( ) 
    {

            ac_meter_attr_t*  pattr_obj=NULL;  
            pattr_obj = ac_meter_get_obj( index) ; 


    ///---------------------------------------------------------------------
    ////{"name":"do","lable":"do","class":17,"dpid":1058,"val":0,"type":0},
    // {"data":{"deviceName":"eleMeter_1_5","mac":"FFFFFFFFFFFF","nodeType":1,"channel":1,"privAddr":5},
    // "attrLst":[{"class":17,"dpid":32857,"lable":"do2","name":"do2","type":0,"val":"0","order":1}],
    // "head":{"gatewayId":"gw_CC0500CFB180","msgId":0,"timeStamp":0,"cmd":"setAttr","appuserId":27,"replaceId":"gw_1738909887431",
    
    
    // Tcp_Tx_ch=1, local_ktj_js
    // {"head":{"gatewayId":"gw_CC0500CFB180","msgId":44,"timeStamp":0,"cmd":"setAttr"},
    // "data":{"deviceName":"eleMeter_1_5","mac":"FFFFFFFFFFFF","nodeType":1,"channel":1,"privAddr":5},
    // "attrLst":[{"name":"do1","val":"1"},{"name":"do2","val":"1"}]}
    

#if 0    //  配置参数的时候---不包括do,do需要单独控制
            cJSON *cjs_Z0  = cJSON_CreateObject();				//创建一个对象     
            cJSON_AddStringToObject(cjs_Z0,	"name",	"do1" );

            memset(attr_val_str_buf,0,ATTR_VAL_STR_BUF_MAX );
            //sprintf(attr_val_str_buf,"%d",  (pattr_obj->data.DO&0x00000001));
            sprintf(attr_val_str_buf,"%d",  (pattr_obj->config.do1));

            cJSON_AddStringToObject(cjs_Z0,	"val",	attr_val_str_buf ); 
            cJSON_AddItemToArray(cjs_attr_array,	cjs_Z0 );


            cJSON *cjs_Z01  = cJSON_CreateObject();		
            cJSON_AddStringToObject(cjs_Z01,	"name",	"do2" );

            memset(attr_val_str_buf,0,ATTR_VAL_STR_BUF_MAX );
  //          sprintf(attr_val_str_buf,"%d",  ((pattr_obj->data.DO>>1)&0x00000001));
            sprintf(attr_val_str_buf,"%d",  (pattr_obj->config.do2));   

            cJSON_AddStringToObject(cjs_Z01,	"val",	attr_val_str_buf ); 
            cJSON_AddItemToArray(cjs_attr_array,	cjs_Z01 );

#endif



#if 0    //   交流电表物模型-v1.4---没有此两项-----

            cJSON *cjs_Z02  = cJSON_CreateObject();		
            cJSON_AddStringToObject(cjs_Z02,	"name",	"do3" );

            memset(attr_val_str_buf,0,ATTR_VAL_STR_BUF_MAX );
            sprintf(attr_val_str_buf,"%d",  ((pattr_obj->data.DO>>2)&0x00000001));
            cJSON_AddStringToObject(cjs_Z02,	"val",	attr_val_str_buf ); 
            cJSON_AddItemToArray(cjs_attr_array,	cjs_Z02 );

            cJSON *cjs_Z03  = cJSON_CreateObject();		
            cJSON_AddStringToObject(cjs_Z03,	"name",	"do4" );

            memset(attr_val_str_buf,0,ATTR_VAL_STR_BUF_MAX );
            sprintf(attr_val_str_buf,"%d",  ((pattr_obj->data.DO>>3)&0x00000001));
            cJSON_AddStringToObject(cjs_Z03,	"val",	attr_val_str_buf ); 
            cJSON_AddItemToArray(cjs_attr_array,	cjs_Z03 );

#endif


        ///---------------------配置参数------------------------------------------------------

        ///---------------------pulseConst参数----------------------------------------------------
        cJSON *cjs_Z1  = cJSON_CreateObject();				//创建一个对象   
        cJSON_AddStringToObject(cjs_Z1,	"name",	"pulseConst" );
        cJSON_AddNumberToObject(cjs_Z1,	"val", pattr_obj->config.pulseConst  ); 
        cJSON_AddItemToArray(cjs_attr_array,	cjs_Z1 );


//-----------------物模型更新到 <<交流电表物模型-v1.4>>---------------------------------------

        cJSON *cjs_Z2  = cJSON_CreateObject();				//创建一个对象   
        cJSON_AddStringToObject(cjs_Z2,	"name",	"almEn" );
        cJSON_AddNumberToObject(cjs_Z2,	"val",	pattr_obj->config.almEn.value  ); 
        cJSON_AddItemToArray(cjs_attr_array,	cjs_Z2 );


    //  ///-------交流电表物模型-v1.4--------------
        cJSON *cjs_Z3  = cJSON_CreateObject();				//创建一个对象   
        cJSON_AddStringToObject(cjs_Z3,	"name",	"thVoltHi" );
        cJSON_AddNumberToObject(cjs_Z3,	"val",	pattr_obj->config.thVoltHi ); 
        cJSON_AddItemToArray(cjs_attr_array,	cjs_Z3 );

        cJSON *cjs_Z4  = cJSON_CreateObject();				//创建一个对象   
        cJSON_AddStringToObject(cjs_Z4,	"name",	"thVoltLow" );
        cJSON_AddNumberToObject(cjs_Z4,	"val",	pattr_obj->config.thVoltLow ); 
        cJSON_AddItemToArray(cjs_attr_array,	cjs_Z4 );

        cJSON *cjs_Z5  = cJSON_CreateObject();				//创建一个对象   
        cJSON_AddStringToObject(cjs_Z5,	"name",	"thFreqHi" );
        cJSON_AddNumberToObject(cjs_Z5,	"val",	pattr_obj->config.thFreqHi ); 
        cJSON_AddItemToArray(cjs_attr_array,	cjs_Z5 );


        cJSON *cjs_Z6  = cJSON_CreateObject();				//创建一个对象   
        cJSON_AddStringToObject(cjs_Z6,	"name",	"thFreqLow" );
        cJSON_AddNumberToObject(cjs_Z6,	"val",	pattr_obj->config.thFreqLow ); 
        cJSON_AddItemToArray(cjs_attr_array,	cjs_Z6 );


        cJSON *cjs_Z7  = cJSON_CreateObject();				//创建一个对象   
        cJSON_AddStringToObject(cjs_Z7,	"name",	"thPowerHi" );
        cJSON_AddNumberToObject(cjs_Z7,	"val",	pattr_obj->config.thPowerHi ); 
        cJSON_AddItemToArray(cjs_attr_array,	cjs_Z7 );

        cJSON *cjs_Z8  = cJSON_CreateObject();				//创建一个对象   
        cJSON_AddStringToObject(cjs_Z8,	"name",	"thPowerLow" );
        cJSON_AddNumberToObject(cjs_Z8,	"val",	pattr_obj->config.thPowerLow ); 
        cJSON_AddItemToArray(cjs_attr_array,	cjs_Z8 );


        cJSON *cjs_Z9  = cJSON_CreateObject();				//创建一个对象   
        cJSON_AddStringToObject(cjs_Z9,	"name",	"thCurrHi" );
        cJSON_AddNumberToObject(cjs_Z9,	"val",	pattr_obj->config.thCurrHi ); 
        cJSON_AddItemToArray(cjs_attr_array,	cjs_Z9 );

        cJSON *cjs_Z10  = cJSON_CreateObject();				//创建一个对象   
        cJSON_AddStringToObject(cjs_Z10,	"name",	"thCurrLow" );
        cJSON_AddNumberToObject(cjs_Z10,	"val",	pattr_obj->config.thCurrLow ); 
        cJSON_AddItemToArray(cjs_attr_array,	cjs_Z10 );


#if 1    //---------------------------交流电表json协议可读写---------

    ///---------------------配置参数------------------------------------------------------

            cJSON *cjs_Z11  = cJSON_CreateObject();				//创建一个对象   
            cJSON_AddStringToObject(cjs_Z11,	"name",	"PT" );

            memset(attr_val_str_buf,0,ATTR_VAL_STR_BUF_MAX );

            if(0==pattr_obj->config.PT)
            {//不能为0 
               pattr_obj->config.PT = 1;
            }


            sprintf(attr_val_str_buf,"%d",  pattr_obj->config.PT);
            printf("attr_val=%d,attr_val_str=%s\n", pattr_obj->config.PT ,attr_val_str_buf);
            cJSON_AddStringToObject(cjs_Z11,	"val",	attr_val_str_buf  ); 

            cJSON_AddItemToArray(cjs_attr_array,	cjs_Z11 );



    ///-----------------------------------------------------------------------

            cJSON *cjs_Z12  = cJSON_CreateObject();				//创建一个对象   
            cJSON_AddStringToObject(cjs_Z12,	"name",	"CT" );

            memset(attr_val_str_buf,0,ATTR_VAL_STR_BUF_MAX );

            if(0==pattr_obj->config.CT)
            {//不能为0 
               pattr_obj->config.CT = 1;
            }

            sprintf(attr_val_str_buf,"%d",  pattr_obj->config.CT);
            printf("attr_val=%d,attr_val_str=%s\n",  pattr_obj->config.CT ,attr_val_str_buf);
            cJSON_AddStringToObject(cjs_Z12,	"val",	attr_val_str_buf  ); 

            cJSON_AddItemToArray(cjs_attr_array,	cjs_Z12 );

    ///---------------------------------------------------------------------

#endif



  #if 0 //   ?????-----避免误操作，导致电能清0，需要独立的电能清0指令
    ///---------------------电能清0------------------------------------------------

            cJSON *cjs_Z3  = cJSON_CreateObject();				//创建一个对象            
            cJSON_AddStringToObject(cjs_Z3,	"name",	"rptActEngiT" );

            memset(attr_val_str_buf,0,ATTR_VAL_STR_BUF_MAX );

            sprintf(attr_val_str_buf,"%d",  pattr_obj->data.EnergyP_T);
            printf("attr_val=%d,attr_val_str=%s\n",  pattr_obj->data.EnergyP_T ,attr_val_str_buf);
            cJSON_AddStringToObject(cjs_Z3,	"val",	attr_val_str_buf  ); 

            cJSON_AddItemToArray(cjs_attr_array,	cjs_Z3 );


    ///---------------------------------------------------------------------

            cJSON *cjs_Z4  = cJSON_CreateObject();				//创建一个对象            
            cJSON_AddStringToObject(cjs_Z4,	"name",	"rptActEngiA" );

            memset(attr_val_str_buf,0,ATTR_VAL_STR_BUF_MAX );

            sprintf(attr_val_str_buf,"%d",  pattr_obj->data.EnergyP_A);
            printf("attr_val=%d,attr_val_str=%s\n",  pattr_obj->data.EnergyP_A ,attr_val_str_buf);
            cJSON_AddStringToObject(cjs_Z4,	"val",	attr_val_str_buf  ); 

            cJSON_AddItemToArray(cjs_attr_array,	cjs_Z4 );

            cJSON *cjs_Z5  = cJSON_CreateObject();				//创建一个对象            
            cJSON_AddStringToObject(cjs_Z5,	"name",	"rptActEngiB" );

            memset(attr_val_str_buf,0,ATTR_VAL_STR_BUF_MAX );

            sprintf(attr_val_str_buf,"%d",  pattr_obj->data.EnergyP_B);
            printf("attr_val=%d,attr_val_str=%s\n",  pattr_obj->data.EnergyP_B ,attr_val_str_buf);
            cJSON_AddStringToObject(cjs_Z5,	"val",	attr_val_str_buf  ); 

            cJSON_AddItemToArray(cjs_attr_array,	cjs_Z5 );

            cJSON *cjs_Z6  = cJSON_CreateObject();				//创建一个对象            
            cJSON_AddStringToObject(cjs_Z6,	"name",	"rptActEngiC" );

            memset(attr_val_str_buf,0,ATTR_VAL_STR_BUF_MAX );

            sprintf(attr_val_str_buf,"%d",  pattr_obj->data.EnergyP_C);
            printf("attr_val=%d,attr_val_str=%s\n",  pattr_obj->data.EnergyP_C ,attr_val_str_buf);
            cJSON_AddStringToObject(cjs_Z6,	"val",	attr_val_str_buf  ); 

            cJSON_AddItemToArray(cjs_attr_array,	cjs_Z6 );

#endif


 }


#endif











int main_time0() {

    struct timeval tv;
    gettimeofday(&tv, NULL);
    unsigned long long now = tv.tv_sec * 1000 + tv.tv_usec / 1000;
    printf("当前时间戳：%llu毫秒\n", now);
    return 0;
}



int main_time1() {

    time_t now;
    now = time(NULL);
    printf("当前时间戳：%ld秒\n", now);
    return 0;
}

int main_time2() {

	 time_t timeStamp;    
	 time(&timeStamp); //怎么用时间戳有问题

     printf("当前时间戳：%ld秒\n", timeStamp);

    return 0;
}





			






//int main_test(void)
int main(void)
{
	json1();
	
	// printf("%s\n",json_data);						//输出字符串
	// cJSON_Delete(TCP);								//清除结构体

    main_time0();    // 当前时间戳：1740817221244毫秒
    main_time1();    // 当前时间戳：1740817221秒
    main_time2();    //当前时间戳：1740818134秒


    // 当前时间戳：1740817221244毫秒
    // 当前时间戳：1740817221秒

  //json_write_double_color_lamp("FFFFFFFFFFFF", "1313" , 80);


  json_write_double_color_lamp_00("FFFFFFFFFFFF", "1313" , 80);

	return 0;
}



#endif 
